package iterables;

import java.util.Iterator;

import interfaces.Criterio;

//TODO: Pr4 Ejer 1 A
public class IterableCriterio<T> implements Iterable<T>{
	private Iterable <T> it;
	private Criterio<T> criterio;

	public IterableCriterio(Iterable<T> i, Criterio<T> c){
		it=i;
		criterio=c;
	}

	public Iterator<T> iterator(){
		return new IteradorCriterio();
	}

	//TODO: Pr4 Ejer 1 B
	private class IteradorCriterio implements Iterator<T>{
		
		private Iterator<T> itor;
		private T actual=null; 

		public IteradorCriterio() {			
			itor = it.iterator();
			siguiente();  
		}
		public T next(){
			T aux1 = actual;
			actual = null;
			siguiente();
			return aux1;
		}
		public void remove(){
		}
		public boolean hasNext(){
			return actual != null;
		}
		private void siguiente(){
			boolean enc = false;
			while (itor.hasNext() && !enc){
				T aux2 = itor.next();
				if (criterio.exp(aux2)){
					actual=aux2;
					enc=true;
				}
			}   
		}
	}

}
